// vuex 应用
import { getToken, setToken, removeToken } from "@/utils/auth";
import { login, getUserInfo } from "@/api/user";
// vuex 处理登录请求缓存token的方式
const state = {
  token: getToken(), // 从缓存中来读取初始值
  userInfo: {}, // 存储用户基本资料（内存中存放）
}; // 存放数据,存放token

// 修改state 中的数据，必须使用multation
const mutations = {
  setToken(state, token) {
    state.token = token;
    // 同步到缓存
    setToken(token);
  },
  removeToken(state) {
    // 删除Vuex token
    state.token = null;
    // 清楚cookie中的token
    removeToken();
  },
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo;
  },
}; // 修改数据

const actions = {
  // context上下文,传入参数，
  async login(context, data) {
    // todo 调用登录接口
    console.log(data);
    const token = await login(data); // 只有请求成功 才会过来走await,等待获得返回数据,调用了封装的user.js中的请求
    // 返回一个token :123456 ,提交multation ,将123456 设置为token
    context.commit("setToken", token); // 提交 mutations ：执行其中的setToken方法，传入token
  },
  // 创建一个调用用户信息的action
  async getUserInfo(context) {
    const result = await getUserInfo();
    context.commit("setUserInfo", result); // 提交 mutations
    console.log("调用用户信息action");
  },
  logout(context) {
    context.commit("removeToken"); // 删除token
    context.commit("setUserInfo", {}); // 删除用户信息
  },
};
// 默认导出
export default {
  namespaced: true, // 开启命名空间，调用js中的anction需要带上user.js
  state,
  mutations,
  actions,
};
